package leetcode_161_180;

public class convertToTitle_168 {
    public String convertToTitle(int columnNumber) {
        /**
         * A 的ascii码 ->65
         * A -> 1
         * B -> 2
         * C -> 3
         * ...
         * Z -> 26
         * AA -> 27
         * AB -> 28
         * 可以发现，基本就是用字母表示的26进制
         * 发现问题，没有表示0的字母
         * 当遇到整数倍的情况只能在最后一位放置Z
         * 52->AZ
         * String的直接+  真的很耗时，改用StringBuffer后 0 ms
         */
        StringBuffer ans = new StringBuffer();
        while (columnNumber > 0) {
            if (columnNumber % 26 == 0) {
                ans.append('Z');
                columnNumber -= 26;
            } else
                ans.append ((char) (columnNumber % 26 - 1 + 65) );
            columnNumber /= 26;
         }
         return ans.reverse().toString();
    }

    /**
     * 另一种处理方式
     * 改成0到25 映射到'A'到'Z'。就可以了
     * 我怎么就想不到
     */
    public String convertToTitle2(int cn) {
        StringBuilder sb = new StringBuilder();
        while (cn > 0) {
            cn--;
            sb.append((char)(cn % 26 + 'A'));
            cn /= 26;
        }
        sb.reverse();
        return sb.toString();
    }
}
